
#ifndef __LIBERTY_LIBRARY_IASSETDEPOTLISTENER_H__
#define __LIBERTY_LIBRARY_IASSETDEPOTLISTENER_H__

#include <Liberty3D/Engine/Uuid.h>
#include <string>

namespace Liberty { namespace Library {
    /**
     * Gives a way of being notified of changes that occured inside a depot.
     */
    class IAssetDepotListener {
    public:
        virtual ~IAssetDepotListener() {}

    public:
        /** An asset was added. */
        virtual void assetAdded(const std::string&) = 0;

        /** An asset was removed. */
        virtual void assetRemoved(const std::string&) = 0;

        /** An asset was modified. */
        virtual void assetModified(const std::string&) = 0;

        /** An asset was moved. */
        virtual void assetMoved(const std::string& oldName, const std::string& newName) = 0;

        /** An asset with a duplicated uuid was detected. */
        virtual void assetUuidDuplicated(const std::string&, const Liberty::Engine::Uuid& oldID, const Liberty::Engine::Uuid& newID) = 0;

        /** Importer informations about an asset was updated. */
        virtual void assetImporterModified(const Liberty::Engine::Uuid& uuid) = 0;

        /** Cached informations about an asset was updated. */
        virtual void assetCachedDataModified(const Liberty::Engine::Uuid& uuid) = 0;

        /** The builded version of an asset was updated. */
        virtual void assetBuildDataModified(const Liberty::Engine::Uuid& uuid, const std::string& buildTag) = 0;
    };
}}

#endif
